#include "main.h"
#include "GUI.h"
#include "gestion_mots.h"
#include "gestion_jeu.h"

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include "SDL_Input/SDL_Input.h"
#include "SDL_Input/SDL_Input_TTF.h"

int main(int argc, char *argv[])
{
    /*Declarations*/
    int i=0,j=0,continuer=1,current_select=0;
    int indice=0;
    
    Surface ecran,fonds,menu_princ_item[3],menu_option_item[4],boite_saisie[2],titre_equipe[2],surf_mess,message,titre_points[2],boite_points[2],barre_progression[2],curseur_progression;
    SDL_Event event;
    SDL_Rect position;
    lettre mot[LIGNES_MAX][TAILLE_MAX];
    SDL_Input_TTF *saisie_user[2]={NULL};
    bool mot_trouve=false;
    TTF_Font *police_grosse=NULL,*police_moyenne=NULL,*police_petite=NULL;
    SDL_Color couleurBlanc = {255, 255, 255};
    SDL_Color Selected = {0 , 0 , 10};
    char type_menu='P';
    char mot_a_trouver[25]="";
    int numero_equipe=1;
    int nbpoints[2]={0};
    int pos_curseur_x=0,pos_curseur_y=0;
    /*Initialisation*/
    init_mot_grille(mot);
    init_positions(&ecran,&fonds,&menu_princ_item[0],&menu_option_item[0],&boite_saisie[0],&titre_equipe[0],&surf_mess,&message,&titre_points[0],&boite_points[0],&barre_progression[0]);
    init_SDL(&ecran,&fonds,&police_grosse,&police_moyenne,&police_petite,couleurBlanc,Selected);
    position.x=50;
    position.y=207;
    saisie_user[0] = SDL_Input_TTF_Create(9,police_petite,Selected,&couleurBlanc,position,SDL_INPUT_TTF_SHADED);
    position.x=650;
    position.y=207;
    saisie_user[1] = SDL_Input_TTF_Create(9,police_petite,Selected,&couleurBlanc,position,SDL_INPUT_TTF_SHADED);
    menu_principal(&ecran,&menu_princ_item[0],police_grosse,couleurBlanc);
    Select_prochaine(&ecran,&menu_princ_item[0],police_grosse,Selected,couleurBlanc,0,type_menu);
    /*Boucle principale*/
    while (continuer)
    {
    SDL_WaitEvent(&event);
    switch(event.type)
	   {
        case SDL_QUIT:
            continuer = 0;
            break;
        case SDL_KEYDOWN:
            switch (event.key.keysym.sym)
            {
                case SDLK_DOWN: 
					change_selected_item(&ecran,&menu_princ_item[0],&menu_option_item[0],police_grosse,Selected,couleurBlanc,&current_select,type_menu,'d');
                    break;
				case SDLK_UP: 
					change_selected_item(&ecran,&menu_princ_item[0],&menu_option_item[0],police_grosse,Selected,couleurBlanc,&current_select,type_menu,'u');
                    break;
				case SDLK_RETURN:
					switch(current_select)
					{
					case 0: if(type_menu=='P') 
								{
								sortie_mot_hasard(mot_a_trouver,taille_grille);
								printf("Le mot a trouver est : %s\n",mot_a_trouver);
								mot[0][0].l=mot_a_trouver[0];
								init_grille(&ecran,&fonds,&boite_saisie[0],&titre_equipe[0],police_moyenne,police_petite,couleurBlanc,mot,choix_difficulte,taille_grille);
								afficher_barre_progression(&ecran,barre_progression,&curseur_progression,numero_equipe,0);
								afficher_message_jeu(&ecran,&surf_mess,&message,police_petite,Selected,1,numero_equipe,mot_a_trouver);
								afficher_nbpoints(&ecran,&titre_points[0],&boite_points[0],police_petite,couleurBlanc,nbpoints);
								type_menu='J';
								SDL_Flip(ecran.surface);
								}
					break;
					case 1:
						choix_options(&ecran,&fonds,&menu_option_item[0],police_grosse,couleurBlanc,&taille_grille,&choix_difficulte,&choix_superP);
						type_menu='O';
						Select_prochaine(&ecran,&menu_option_item[0],police_grosse,Selected,couleurBlanc,current_select,type_menu);
						SDL_Flip(ecran.surface);
					break;
					case 2: if(type_menu=='P')  
										continuer=0;
					break;
					case 3: type_menu='P';
						SDL_BlitSurface(fonds.surface, NULL, ecran.surface, &fonds.position);
						menu_principal(&ecran,&menu_princ_item[0],police_grosse,couleurBlanc);
					break;
				     }
				    if(type_menu=='J')
				    	{
					    afficher_plateau(&ecran,police_moyenne,couleurBlanc,mot,choix_difficulte,taille_grille);
					    afficher_message_jeu(&ecran,&surf_mess,&message,police_petite,Selected,1,numero_equipe,mot_a_trouver);
				    	}
			break;
		case SDLK_RIGHT:
			 gerer_options(ecran,fonds,menu_option_item,police_grosse,Selected,couleurBlanc,&taille_grille,&choix_difficulte,&choix_superP,&current_select,type_menu);
			break;
		case SDLK_ESCAPE:
		    continuer=0;
		    break;
		case SDLK_SPACE:
		enter_verif_mot(ecran,surf_mess,message,titre_points,boite_points,boite_saisie,barre_progression,curseur_progression,saisie_user,police_petite,police_moyenne,Selected,couleurBlanc,taille_grille,&numero_equipe,&indice,mot_a_trouver,mot,nbpoints);
            	break;
		  case SDLK_q: type_menu='P';
					 SDL_BlitSurface(fonds.surface, NULL, ecran.surface, &fonds.position);
					 menu_principal(&ecran,&menu_princ_item[0],police_grosse,couleurBlanc);
					 current_select=0;
					 break;
		default: break;
		}//Fin du switch keysym
	   }//Fin du switch event.type
    }//Fin de la boucle principale
    /*Vidage de la mémoire avant de quitter*/
    SDL_FreeSurface(fonds.surface);
    TTF_CloseFont(police_grosse);
    TTF_CloseFont(police_moyenne);
    TTF_CloseFont(police_petite);
    TTF_Quit();
    SDL_Quit();
 
    return EXIT_SUCCESS;
}
